Conventional software licensing is implemented by the identification of decision points within a unit of control code, and when a decision point is arrived at by the execution unit, a decision is made as to which direction code execution should proceed, based on the presence or absence of a license right. This technique applies licensing at program execution time, and program code must be designed to obtain and store license permissions, and enforce program flow control based on the existence or absence of specific permissions.
Classes of programmable devices exist which do not lend themselves to conventional software licensing techniques. Such devices include smart devices, for example the types of devices that are regarded as contributing to the Internet of Things (IoT), i.e., the interconnection via the Internet of computing devices embedded in everyday objects, enabling them to send and receive data. “Things”, in the IoT sense, can refer to a wide variety of devices such as heart monitoring implants, biochip transponders on farm animals, electric clams in coastal waters, automobiles with built-in sensors, DNA analysis devices for environmental/food/pathogen monitoring, or field operation devices that assist firefighters in search and rescue operations. Current market examples include home automation (also known as smart home devices) such as the control and automation of lighting, heating (such as a smart thermostat), ventilation, air conditioning (HVAC) systems, and appliances such as washer/dryers, robotic vacuums, air purifiers, ovens, and refrigerators/freezers that use Wi-Fi for remote monitoring.
Such devices lack the resources of memory space and processor power which would otherwise allow them to tolerate the overhead of conventional software licensing technology, with its attendant requirements for executing cryptography algorithms.